import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import { fileURLToPath, URL } from 'node:url'
import UnoCSS from 'unocss/vite'
import AutoImport from 'unplugin-auto-import/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import Components from 'unplugin-vue-components/vite'
import { defineConfig } from 'vite'
import viteCompression from 'vite-plugin-compression'
import { createStyleImportPlugin, ElementPlusResolve } from 'vite-plugin-style-import'
import VueDevTools from 'vite-plugin-vue-devtools'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    VueDevTools(),
    UnoCSS(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
      imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'],
      // dirs: ['./src/utils/**', './src/stores/**'],
      // 默认
      // dirs: ['./src/**'],
      // 默认 自动生成文件夹存放全局指令
      // dts:'./auto-import.d.ts' ,
      dts: './types/auto-imports.d.ts',
      // eslint报错解决：'ref' is not defined
      eslintrc: {
        // 默认false，
        // true 启用生成。生成一次就可以，避免每次工程启动都生成，一旦生成配置文件之后，最好把enable关掉，即改成false
        // 否则这个文件每次会在重新加载的时候重新生成，这会导致eslint有时会找不到这个文件。当需要更新配置文件的时候，再重新打开
        // enabled: true,
        // 默认就是./.eslintrc-auto-import.json
        // filepath: './.eslintrc-auto-import.json'
        // 默认true
        // globalsPropValue：true
      }
    }),
    Components({
      resolvers: [ElementPlusResolver()],
      // dirs: ['./src/components', './src/index/components'],
      dts: './types/components.d.ts'
      // 组件名称 包含目录 ，防止命名冲突
      // directoryAsNamespace: true,
    }),
    createStyleImportPlugin({
      resolves: [ElementPlusResolve()],
      libs: [
        {
          libraryName: 'element-plus',
          esModule: true,
          resolveStyle: (name: string) => {
            return `element-plus/theme-chalk/${name}.css`
          }
        }
      ]
    }),
    viteCompression({
      verbose: true,
      disable: false,
      deleteOriginFile: false,
      threshold: 10240,
      algorithm: 'gzip',
      ext: '.gz'
    })
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  css: {
    // 全局配置scss
    preprocessorOptions: {
      // 全局配置scss预处理器
      scss: {
        additionalData: `
		  @use "@/styles/variables.scss" as *;
		  @use "@/styles/mixins.scss" as *;`,
        javascriptEnabled: true
      }
    }
  }
})
